Interactive product improvement through the use of variants and data gathering reports in a system that can be updated on the fly

ABSTRACT

Techniques for interactive product improvement through the use of variants and data gathering reports in a system that can be updated on the fly are disclosed. In some embodiments, interactive product improvement through the use of variants and data gathering reports in a system that can be updated on the fly includes processing a manifest to determine that a plug-in that includes a plurality of variants is available; randomly selecting a variant for the plug-in to automatically install on a device; and automatically installing the plug-in, in which the randomly selected variant is executed at run-time.

BACKGROUND OF THE INVENTION

In computing systems, a plug-in (e.g., or plugin) generally refers to asoftware component or set of software components that can add specificabilities to a software application. If supported, plug-ins can enablecustomizing the functionality of an application. Applications generallysupport plug-ins for various reasons.

Plug-ins can be used to enable third-party developers to, for example,create new features and/or functionality that extends an application; tosupport easily adding new features and/or functionality; to reduce thesize of an application; and to separate source code from an applicationdue to the incompatibility of software licenses.

For example, web browsers can use plug-ins to display new file types(e.g., Adobe® Flash® Player), graphics software can use plug-ins tosupport file formats and/or process images (e.g., Adobe® Photoshop®),and office productivity software can use plug-ins to extend theabilities of its application by adding custom commands and/orspecialized features (e.g., Adobe® Acrobat®).

BRIEF DESCRIPTION OF THE DRAWINGS

Various embodiments of the invention are disclosed in the followingdetailed description and the accompanying drawings.

FIG. 1 is a functional diagram showing a platform for providinginteractive product improvement through the use of variants and datagathering reports in a system that can be updated on the fly inaccordance with some embodiments.

FIG. 2 is a diagram showing an embodiment of a SPA plug-in.

FIG. 3 is a diagram showing an embodiment of a manifest that includesvariants.

FIG. 4 is a flow diagram of a process for interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly in accordance with someembodiments.

FIG. 5 is another flow diagram of a process for interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly in accordance with someembodiments.

FIG. 6 is another flow diagram of a process for interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly in accordance with someembodiments.

DETAILED DESCRIPTION

The invention can be implemented in numerous ways, including as aprocess; an apparatus; a system; a composition of matter; a computerprogram product embodied on a computer readable storage medium; and/or aprocessor, such as a processor configured to execute instructions storedon and/or provided by a memory coupled to the processor. In thisspecification, these implementations, or any other form that theinvention may take, may be referred to as techniques. In general, theorder of the steps of disclosed processes may be altered within thescope of the invention. Unless stated otherwise, a component such as aprocessor or a memory described as being configured to perform a taskmay be implemented as a general component that is temporarily configuredto perform the task at a given time or a specific component that ismanufactured to perform the task. As used herein, the term ‘processor’refers to one or more devices, circuits, and/or processing coresconfigured to process data, such as computer program instructions.

A detailed description of one or more embodiments of the invention isprovided below along with accompanying figures that illustrate theprinciples of the invention. The invention is described in connectionwith such embodiments, but the invention is not limited to anyembodiment. The scope of the invention is limited only by the claims andthe invention encompasses numerous alternatives, modifications andequivalents. Numerous specific details are set forth in the followingdescription in order to provide a thorough understanding of theinvention. These details are provided for the purpose of example and theinvention may be practiced according to the claims without some or allof these specific details. For the purposes of clarity, technicalmaterial that is known in the technical fields related to the inventionhas not been described in detail so that the invention in notunnecessarily obscured.

Software applications are continually being modified to provide productimprovements, such as adding new and/or improved functionality (e.g.,new features and/or user interface designs). User case studies aretypically used to determine desirable new features for softwareapplications. However, such user case studies are generally limited innumbers of users, limited in diversity of users, and/or such user casestudies can be costly and time consuming.

What is needed are improved techniques for determining desirable productimprovements for software applications. Accordingly, interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly is provided in accordance withsome embodiments.

In some embodiments, interactive product improvement through the use ofvariants and data gathering reports in a system that can be updated onthe fly includes processing a manifest to determine that a plug-in thatincludes a plurality of variants is available (e.g., a plug-in thatsupports a plurality of variants that can be executed at run-time basedon a selected variant); randomly selecting a variant for the plug-in toautomatically install on a device (e.g., in which the randomly selectedvariant can be stored locally on the device, such as in a registry, andthen can be used as a persistent configuration parameter to the plug-infor selecting the variant to be executed during run-time); andautomatically installing the plug-in, in which, the randomly selectedvariant is executed at run-time. In some embodiments, the randomlyselected variant facilitates a feedback loop for providing interactiveproduct improvement through a use of variants; and data gatheringreports in a system that can be updated on the fly.

In some embodiments, the manifest is modified to change a percentageallocation for the variant based on monitored user interactions with theplug-in. In some embodiments, the manifest is modified to change thevariant as a default variant for the plug-in, in which the defaultvariant is executed at run-time (e.g., based on processing of an updatedmanifest that includes parameters for forcing the selection of thatvariant, which is the default variant). In some embodiments, therandomly selected variant requires a license to execute. In someembodiments, the randomly selected variant requires a license toexecute, in which additional payment is required to access the plug-in.

In some embodiments, interactive product improvement through the use ofvariants and data gathering reports in a system that can be updated onthe fly former includes monitoring user activity that includes aninteraction with the plug-in; generating a report based on monitoreduser activity that includes the interaction with the plug-in; andsending the report that includes the monitored interaction with theplug-in to a server.

In some embodiments, interactive product improvement through the use ofvariants and data gathering reports in a system that can be updated onthe fly includes sending a manifest to a plurality of devices, in whichthe manifest identifies a plug-in that includes a plurality of variantsthat are available for the plug-in, in which the variants are randomlyselected for each of the plurality of devices; and receiving a pluralityof reports based on monitored user activity that includes an interactionwith the plug-in for each of the plurality of devices. In someembodiments, interactive product improvement through the use of variantsand data gathering reports in a system that can be updated on the flyfurther includes modifying the manifest to change a percentageallocation for each variant based on the monitored interactions with theplug-in. In some embodiments, interactive product improvement throughthe use of variants and data gathering reports in a system that can beupdated on the fly further includes modifying the manifest to change oneof the plurality of variants as a default variant tor the plug-in, inwhich the default variant is executed at run-time.

In some embodiments, the variant mechanism techniques described hereinwith respect to various embodiments can provide for a feedback loop fortesting user interactions with plug-ins that include variants. In someembodiments, variants are used to specify different run-time behaviorsof a plug-in or its components for testing to provide for a feedbackloop for testing user interactions with different variants of plug-ins(e.g., plug-ins can use different variants to test newfeatures/functionality). For example, various different new userinterface designs (e.g., new versus classic user interface designs) fora software application can be tested using these techniques. As anotherexample, various new features and/or implementations of such newfeatures can be tested using these techniques.

FIG. 1 is a functional diagram showing a platform for providinginteractive product improvement through the use of variants and datagathering reports in a system that can be updated on the fly inaccordance with some embodiments. In some embodiments, a platform (e.g.,a Services Plug-in Architecture (SPA) platform) facilitates providinginteractive product improvement through the use of variants and datagathering reports in a system that can be updated on the fly. In someembodiments, a platform (e.g., a Services Plug-in Architecture (SPA)platform) facilitates directing plug-in updates for a softwareapplication to a target audience using manifest parameters, if sodesired.

Referring to FIG. 1, a platform 100 is shown that includes a SPA server110. In some embodiments, the SPA server is a cloud service. In variousembodiments, SPA server 110 is managed by a third party (e.g., Akamai)or is managed by the software company which produces the application 130(e.g., Adobe in the case of Adobe® Acrobat®). For example, the SPAserver can be a server controlled/maintained by a software applicationvendor (e.g., associated with application 140), or as another example,the SPA server can be provided by a third party content delivery serverused by the software application vendor for such content delivery (e.g.,an Akamai server or another third party content delivery server). Asshown, the SPA server 110 includes a SPA engine 112, a manifest 114(e.g., a SPA plug-in manifests that can be implemented as an XMLformatted file, or another format of data, that lists available SPAplug-ins and/or versions of SPA plug-ins), and a plug-in 116 (e.g., aSPA plug-in). In some embodiments, the SPA server 110 also includestarget information 118. In some embodiments, the target information 118is included within the manifest 114 (e.g., using manifest parameters).As also shown, a client device 130 is in network communication with theSPA server 110 via a network 120 (e.g., the Internet), and the clientdevice 130 includes a software application 140 (e.g., Adobe® Acrobat® oranother software application) that includes a SPA engine 142 (e.g., aSPA loader), a manifest 144 (e.g., an XML file or another formatted setof data, such as a signed XML list of SPA plug-ins, and, in some cases,multiple versions of plug-ins can be available, such as an initialversion 1.0 may only support English only, and then a later version 1.1may support English, French, German, and Spanish languages), and aplug-in 146.

For example, the client device 130 executes the application 140, inwhich the SPA engine 142 can periodically request a manifest. The SPAserver 110 executes the SPA engine 112, and in response to the manifestrequest sends the manifest 114 to the SPA engine 142. The SPA engine 142processes the downloaded manifest 144 to determine which plug-ins (e.g.,including, in some cases, which versions of a plug-in) to download andthen install for use by the application 140 (e.g., the SPA engine 142can determine which plug-ins/versions of plug-ins to download based onprocessing of the manifest 144 prior to downloading any new plug-ins,which can be performed as an asynchronous communication process). TheSPA engine 142 can then request the selected new (versions of) plug-insfrom the SPA server 110. In some embodiments, processing the manifestincludes selecting a plug-in that includes variants using varioustechniques described herein (e.g., processing the manifest to determinea variant selection, storing the variant selection as a persistentconfiguration parameter for the plug-in, and using the variant selectionwhen loading the plug-in to execute the selected variant at run-time).In some embodiments, processing the manifest includes selecting aplug-in (e.g., and possibly a particular version of a plug-in) based ontargeting information included in the manifest (e.g., or separatelystored target information provided by the SPA server 110) using varioustechniques described herein. In some embodiments, targeting informationincludes various parameters associated with the application 140 and/orthe client device 130 (e.g., geography, locale, operating systemplatform version related information, application version relatedinformation, and/or other basic or advanced attributes, such as tunerkeys, or other parameters, such as those described herein with respectto various embodiments). In some embodiments, targeting informationincludes tuner parameters (e.g., matching values of tuner keys, whichare configuration settings that can be security stored and associatedwith the software application) using various techniques describedherein. In some embodiments, both variants and targeting information areused for selecting which (if any) plug-ins/versions of plug-ins toinstall and which variants to execute at run-time for use by theapplication 140 using various techniques described herein.

In some embodiments, a new plug-in or new versions of a plug-in canrequire certain billing or licensing requirements. For example, if theapplication 140 does not have sufficient license/billing rightsassociated with the new plug-in or new version of the plug-in, then theSPA engine 142 can execute a user interface (UI) display (e.g., UItrigger) that provides an interface for prompting a user to provide anyrequired license/billing related information and authorization (e.g.,billing model, payment method(s) and authorization certificate(s)) aspart of the process for downloading and installing that plug-in/plug-inversion, which can also include secure interactions and verificationswith the SPA server 110 or another billing/licensing service or cloudservice for performing billing/licensing processing and authorisations).

In some embodiments, an application monitor 150 executes on the clientdevice 130 to monitor a user's interaction with plug-ins installed foruse with the application 140. In some embodiments, the applicationmonitor 150 monitors activities (e.g., user interactions and/orapplication activities) with plug-ins (e.g., selected for install usingvariants) and generates reports for the platform (e.g., a ServicesPlug-In Architecture (SPA) platform) based on the monitored userinteractions with plug-ins that facilitates providing interactiveproduct improvement through the use of variants and data gatheringreports in a system that can be updated on the fly. For example, theapplication monitor 150 can record mouse clicks, keyboard interactions,and/or touch screen interactions to monitor which features users areusing, not using, and/or how the users are interacting with suchfeatures (e.g., features/functionality associated with plug-ins). Asanother example, the application monitor 150 can record observation ofthe application (e.g., as a whole), with filtering applied to all datato extract desired data regarding the plug-in of focus on a back-endserver or cloud service function (e.g., to limit server communicationfrom many clients), or in some cases, the filtering or some of thefiltering cart be performed locally on the client device. Thesetechniques can be used to facilitate a software application productimprovement program that can yield valuable information about howcustomers use and interact with such software application products,including plug-ins and different versions of plug-ins. The softwareapplication product improvement program can be implemented to bevoluntary (e.g., users can be prompted to opt-in and/or be given anoption to opt-out) and anonymous. In some scenarios, customers who electto participate agree to share various information, including thefollowing: system, information, such as operating system, processor, andmemory installed; browser type and version; certain, softwareapplication product information, such as version number; plug-ininformation, such as version number; and software application featureusage information including plug-in/plug-in version usage information,such as menu options or buttons selected.

In some embodiments, the manifest 114 is processed on the SPA server 110by the SPA engine 112 to determine which plug-ins/versions of plug-insto select for downloading to the client device 130 for installation anduse by the application 140. In some embodiments, the SPA server 110requires that the SPA engine 142 send various information associatedwith the client device 130 and the application 140 to process themanifest 114 and, in some cases, the target information 118. Forexample, such information provided by the client device for suchpurposes can be provided in an XML file or another format of dataincluding any parameters used for processing the manifest 114, such asclient device 130 and application 140 related attributes, tuner keysettings, and/or any other attributes or parameters. In someembodiments, whether to process the manifest locally on the clientdevice 130 or on the SPA server 110 can be configured or determineddynamically (e.g., based on client processing resources, capabilities,and/or trust parameters, based on SPA server processing resources and/ornetwork bandwidth, and/or various other parameters or considerations,such as for performance, bandwidth, work load, balancing, and/orsecurity considerations).

In some embodiments, the plug-in is installed on-the-fly without theuser waiting or having to restart the application. In some embodiments,the plug-in is automatically installed, but the plug-in is executed onlywhen the application is started. For example, if the plug-in is not yetdownloaded and installed when the application is started, then theplug-in is not executed until the next time the application is started(e.g., this approach can ensure that the user interface is consistentfor the application throughout a given session, and avoids a userexperience in which a user may be surprised by a user interface changingduring that session).

In various embodiments, steps are performed in any order. For example,new plug-ins may be periodically detected and obtained from SPA server110, and the plug-in 116/146 may have been downloaded before processingthe manifest 144 to determine whether or not to install the plug-in 146.

In some embodiments, plug-ins perform a variety of services andfunctions that are not necessarily provided by the underlyingapplication (e.g., Adobe® Acrobat® or another application) and in atleast some cases can only be obtained by installing the plug-in. Forexample, an electronic signature plug-in can be provided to extend anoffice productivity software application, such as Adobe® Acrobat®. Thevariant mechanism described herein with respect to various embodimentscan be used to test providing the electronic signature plug-in as afor-purchase plug-in version and as a free trial plug-in version (e.g.,free for a certain period of time before purchase is required forcontinued use). The customer interactions with these variants can bemonitored to determine which option is more likely to generate morerevenue (e.g., whether there will be more purchases of the new plug-inby users if there is a free trial period or not). Based, on the feedbacklearned using the variant mechanism, for this example plug-in scenario,the manifest can be modified to change the variants (e.g., adjustvariant allocations, such as percentages associated with differentvariants of the plug-in) or, in some cases, simply choose one of thevariants as the default or only variant of the plug-in to execute atrun-time (e.g., or as another example, a few number of variants may beused to perform further testing on a subset of the variants as a form ofa run-off between such variants, such as to obtain a wider metric torthose variants before determining whether or not to select one or any ofthose variants for the application). For example. If the for-purchaseonly option is more successful based on such variant based testing andautomatic feedback loop (e.g., generates more revenue and/or yields agreater number of purchases of the plug-in), then the manifest can bemodified to only provide that variant of the plug-in (e.g., the trialperiod variant is not included in the manifest). The electronicsignature plug-in is merely exemplary and plug-ins are not necessarilyso limited. As will, now be apparent to one of ordinary skill in the artin view of the various embodiments described herein, the variantmechanism techniques can be used to provide plug-ins that include aplurality variants and can be used to automatically adjust variantsettings based on monitored feedback using the various techniquesdescribed herein with respect to various embodiments (e.g., withoutnecessarily having to re-download the plug-in, as the variant settingscan be adjusted to cause different variants to be performed at run-timefor that plug-in, in which the variants are adjusted using, for example,manifest parameters that can be changed in a new version of a manifest,which can be downloaded and processed to cause the stored value(s) ofthe variant selection to be modified on a given client device(s)).

In various embodiments, a plug-in is able to access cloud-basedservices, includes a sophisticated user interface experience (e.g.,panels and calculations), can be easily created, and/or can interactwith native user interface elements (e.g., user interface controlsand/or services that are native to Adobe® Acrobat® as opposed to theplug-in). In various embodiments, an out-of-update of a plug-in issupported (e.g., detection, distribution, and/or execution of a plug-inis not dependent a version update of the software application for whichthe plug-in is provided, such as Adobe® Acrobat®, and in some cases,such can be installed on-the-fly, such as when the software applicationis currently being executed), a plug-in has access to Access to theJavaScript Document Object Model (DOM) Application ProgrammingInterfaces (APIs), and/or a plug-in is able to provide bidirectionalcommunication.

In addition to being able to facilitate interactive product improvementthrough the use of variants and data gathering reports in a system thatcan be updated on the fly, the platform 100 can also facilitatedirecting plug-in updates for a software application to a targetaudience using manifest parameters, if so desired, in some embodiments,plug-ins are targeted based on attributes associated with the clientdevice, such as basic attributes (e.g., version, platform, etc.) as wellas advanced attributes (e.g., variants, tuner keys, etc.). For example,if a brand new plug-in is only available to Chinese language versions ofthe software application, then the plug-in can be targeted to suchChinese users using manifest parameters (e.g., language version,geography, and/or locale parameters). Using target information (ifdesired), plug-ins may be targeted to Chinese users (e.g., or usersmeeting some other criteria).

In some embodiments, plug-ins are targeted based on attributesassociated with the client device, including advanced attributes, suchas tuner keys. In some embodiments, tuner keys 160 are configurationsettings that are stored on the client device as shown in FIG. 1 (e.g.,tuner keys can be stored as registry key related information securelystored and associated with the application 140). For example, tuner keyscan be used for enterprise customers of the software application 140 tocontrol a common configuration environment for each of the clientdevices managed by a particular enterprise (e.g., in which a systemadministrator can control which plug-ins/versions of plug-ins can beinstalled/loaded in order to maintain a common client device computingenvironment, including using such tuner keys for selecting whichversions and plug-in extensions can be installed/loaded for the softwareapplications on the client device).

The various techniques described herein with respect to variousembodiments for targeting plug-ins based on attributes associated withthe client device, such as basic attributes and advanced attributes,provide for a more flexible and targeted mechanism, for distribution andinstallation of plug-ins. Another benefit is the reduced amount ofnetwork traffic, which reduces networking related costs. Other criteriaby which plug-ins are targeted may be employed; some other examples aredescribed in further detail below.

FIG. 2 is a diagram showing an embodiment of a SPA plug-in. In someembodiments, interfaces, services, and/or functions exposed by SPAplug-in 200 can be used to update an application user interface todisplay a user interface control and/or any other functionalityassociated with the plug-in. For example, an electronic signatureplug-in associated with a user interface and/or various other productimprovements can be implemented using the various techniques describedherein. In some embodiments, a plug-in includes other components inaddition to those described herein.

Referring to FIG. 2, SPA plug-in 200 includes interface definitionspecification (IDS) 202. In general, IDS 202 includes metadatadescribing the SPA plug-in, including (but not limited to) the contentsof a SPA plug-in wrapper or package (e.g., SPA plug-in 200). In variousembodiments, IDS 202 includes the following: identifying attributes ofthe SPA plug-in (e.g., a unique identifier (ID) and a version number touniquely identify the plug-in and its version, and in some cases, agroup attribute that can be used, for example, to identify plug-insauthored by the same vendor), user interface elements of the SPA plug-into be displayed via an application user interface (e.g., panels, menuitems, buttons, etc.), actions performed by the SPA plug-in via anapplication user interface (e.g., new panes, logging, events, or pop-upsnot native to the application), references to resources used or calledby the SPA plug-in (e.g., access strings, icons, databases, or storage),etc. In some embodiments, IDS 202 includes metadata about resources 204and/or actions 206.

In this particular example, IDS 202 includes references to resources 204and actions 206, which are also components of SPA plug-in 200. Resources204 include resources called by or used by an SPA plug-in and a varietyof items, such as Icons, strings, data files, anchor accessible storageor devices. In some embodiments, resources 204 include common resources(e.g., which are available or used globally) and localized resources(e.g., for use in specific locales).

Graphics platform 206 is used to draw (e.g., buttons, checkboxes andother user interface controls) to an application user interface. In someembodiments, graphics platform 206 is a SWF (Shockwave Flash) file. ASWF supports all three key concepts of a Model-View-Controller (MVC)model and is an example of a compiled, self-contained,platform-independent graphics platform. At least in the case of SWFfiles, the model is handled via the logic which is available to a SWFvia the underlying ActionScript code which is compiled into the SWF.ActionScript and SWFs, compared to some other MVC models, may beattractive, because the MVC model is platform-independent (e.g., likeJava). Some other user interface platforms are platform-specific (e.g.XCode for iOS is specific to Apple platforms). However, whatever theplatform, they all typically support some form of graphical interfacebuilder IDE (e.g. the Adobe Flash/Flex Builder) along with a programminglanguage interface (e.g. ActionScript), and via some form of compilerspit out an executable of some form (e.g. a SWF file).

In some embodiments, a plug-in (e.g., a SPA plug-in) is a softwaremodule created to extend the capabilities of a software application(e.g., Adobe® Acrobat® or another software application). In someembodiments, a plug-in is packaged as a container file (e.g., aUniversal Container Format (UCF) file). In some embodiments, the plug-inalso includes a digital signature for certification.

In some embodiments, variant names and percentages are used to allocatedifferent variants of a plug-in with a degree of randomness such thatdifferent client devices may be configured to execute (e.g., at loadtime/run-time) different variants of the plug-in to facilitateinteractive product improvement through the use of variants and datagathering reports in a system, that can be updated on the fly. Thefollowing figure shows an example of variant names and percentages.

FIG. 3 is a diagram showing an embodiment of a manifest that includesvariants. In some embodiments, variants (e.g., implemented as shown) arelocated in the manifest 114 and/or in target information 118 on the SPAserver as shown in FIG. 1. In this particular example, a manifest (e.g.,manifest 114 on SPA server 110 as shown in FIG. 1) lists a plug-in thatincludes variants. In some embodiments, variants include other elementsin addition to or as an alternative to those described herein.

Referring to FIG. 3, SPA manifest 300 includes variant information 302.In this example, three variants are defined: variant A with a percentageor probability of 25%, variant B with a percentage or probability of25%, and variant C with a percentage or probability of 25%. Althoughthree variants are shown in this example, any number of variants may beused (e.g., just variant A, or another form of identification label,such as A1, B12, Car, BSg67, etc.) and different allocations (e.g.,percentages) may be used for each of the variants. A number in the range[1, 100] (i.e., inclusive of 1 and 100) is selected. If therandomly-selected number is in the range of [1, 25] then variant A(i.e., the first variant encountered when parsing variant information302) is used, if the randomly-selected number is in the range of [26,50] then variant B (i.e., the second variant encountered when parsingvariant information 302) is used, and if the randomly-selected number isin the range of [51, 75] then variant C is used. If therandomly-selected number is greater than or equal to 76 then the plug-inis not updated. Each of the variants may be associated with a differentaspect of the plug-in, including the plug-in itself. Note that variantsare applicable to panes, panels, menu items, buttons, links, textactions, and even as ActionScript conditionals. In general, variantsallow for complete modification of the plug-in in any way, shape, orform desired.

Variants may be used to test different functionality/features ofplug-ins for a variety of applications. For example, a new plug-in thatincludes a plurality of variants may be provided, and a company may wantto determine the most effective variant of the new plug-in, such asbased on user interaction. In one example of how variants are used, 5%of users are presented with a first variant of the plug-in, 5% of usersare presented with a second variant of the plug-in, and the remaining90% of users are ignored (i.e., they are not part of the productimprovement testing for the different variants of this new plug-in). Byobserving the interactions of the users presented with the first andsecond variants of the plug-in (e.g., using Adobe® Headlights or anotherprogrammatic tool for monitoring user interactions with a softwareapplication that is configured to execute different variants of theplug-in at run-time), the most effective variant of the new plug-in canbe determined to facilitate product improvement for the softwareapplication. Using variants, trial features/functionality of a newplug-in may be tested on a portion of the user base before beingreleased on a wider scale.

In some embodiments, variants are combined with other target informationso that a particular variant of a plug-in is only presented to a numberof users (e.g., a subset of randomly selected users or all users basedon the variant(s)), devices, or configurations (e.g., attributes) whichmeet certain criteria based on the target information. For example, aversion of a plug-in can be delivered to a certain percentage ofnon-enterprise users; enterprise users in that example would not bepresented with the plug-in (e.g., which can be targeted to not receivethe plug-in based on tuner key settings/values). Another example is anew plug-in that is English-only (e.g., because there was not enoughtime to localize the plug-in). At a later point, a revision comes alongthat contains tier one locales (e.g., French, German, Spanish), followedby tier two (Chinese, Japanese, Korean), etc. As another example, suchtargeting techniques can be used to target variant selection for certainusers, devices, and/or other criteria (e.g., MAC OS users in the UnitedStates can be configured to select variant A of a new plug-in, andMicrosoft Windows users in the United States can be configured toselected variant B of the new plug-in, and all other users can beconfigured to select variant C of the new plug-in).

In some embodiments, a plug-in or a particular version of the plug-in isdelivered to enterprise users based on a tuner key (e.g., setting(s) oftuner key(s) can be used to determine whether or not the plug-in isinstalled for the enterprise user's software application).

In some embodiments, a decision whether to install a plug-in or aparticular version of the plug-in (e.g., which includes a random factor)is made each time an application is started. For example, if a messageis to be presented to 5% of users, each time a user starts theapplication, then that user has a 5% chance of viewing the message. Insuch embodiments, just because a user is presented with the message onetime does not necessarily mean that that user will see the message againthe next time that the user runs that application.

Below is an example manifest schema that lists available SPA plug-insthat can be downloaded from a SPA server. As shown below, the manifestschema supports variants and also supports attributes and tuner keys fortargeting delivery of plug-ins.

Manifest Schema for Available SPA plug - ins on Server namespacexsd=“http://www.w3c.org/2001/XMLSchema-datatypes default namespacepdf=“http://ns.adobe.com/pdf/services/manifest/2011” grammar { start =element manifest {manifestContent} manifestContent = attribute version{versionString} & attribute release {versionString} ? & attribute group{uidString} ? & attribute updateRate xsd:positiveInteger ? & attributeupdateWait xsd:positiveInteger ? & element config {configContent} *element plugin {pluginContent} * pluginContent = attribute id{uidString} & attribute group {uidString} ? & attribute requires{versionString} ? & { configContent } configContent = attribute version{versionString} & attribute release {versionString} ? & attribute{tunerKey} {tunerList} ? & attribute startDate {xsd:date} ? & attributerevertDate {xsd:date} ? & element configuration {configurationContent} *& element download {downloadContent} & element install {installContent}? & element variant {variantContent} * & element locale{localeContent} * uidString = xsd:token {pattern=“[a-zA-Z0-9_\.]*”}nameString = xsd:token {pattern=“[a-zA-Z0-9_]*”} versionString =xsd:token {pattern=“[0-9]+(\.[0-9]+){0-3}*”} configurationContent =attribute platform {xsd:token = “Windows” | “OSX”} ? & attribute product{xsd:token = “Reader” | “Standard” | “Pro”} ? downloadContent =attribute protocol {xsd:token = “http” | “https”} ? & attribute urixsd:anyURI attribute algorithm {xsd:token = “SHA1” | “SHA256” | “SHA512”| “RIPEMD160”} & attribute hash {xsd:token {pattern=“[0-9a-fA-F]*”}} &attribute excludePromptInstall {xsd:token = “yes” | “no”} ?installContent = attribute requiresPrompt {xsd:token = “yes” | “no”} ? &attribute promptPane {uidString} ? & attribute immediate {xsd:token =“yes” | “no”} ? & attribute priority {priorityContent} ? priorityContent= xsd:token = “required” | “recommended” | “optional” | “testing”variantContent = attribute name {nameString} & attribute percentagexsd:positiveInteger tunerKey = xsd:token{pattern=“enable[a-zA-Z0-9_\]*”} tunerList = {nameString} ( xsd:token{pattern=“,”} {nameString} )* localeContent = attribute language{langCode} & attribute prompt xsd:text & attribute note xsd:text ?langCode = xsd:token = “en-US” | “fr-FR” | “de-DE” | “ja-JP” | “zh-CN” |“zh-TW” | “ko-KR” | “nl-NL” | “sv-SE” | “it-IT” | “es-ES” | “pt-BR” |“nb-NO” | “fi-FI” | “da-DK” | “cs-CZ” | “hu-HU” | “tr-TR” | “ru-RU” |“pl-PL” | “hr-HR” | “ro-RO” | “sk-SK” | “sl-SI” | “uk-UA” | “ca-ES” |“eu-BS” | “ar-AE” | “el-GR” | “he-IL”

Referring to the above example manifest schema, in some embodiments, theversion attribute is the version of the schema itself, while the releaseattribute describes the required version of the software application(e.g., Adobe® Acrobat®) in order to interpret the schema (e.g., as thecode for this example manifest schema is written in C++). The updateRateis used to override the time in days between checking for updates, whilethe updateWait is the delay time after initializing the softwareapplication (e.g., executing Adobe® Acrobat®). Once the manifest ischecked, the rate of updates for SPA plug-ins will be set to that of themanifest until the described rate changes upon subsequent updates. Anoptional group can be specified to indicate the default group for allplug-ins listed in the manifest. With regard to a manifest plug-inelement, standard identifying attributes of the plug-in include itsunique id, group identifier, version, the configuration version itrequires, and the release version of the software application required.In some cases, if the group identifier is specified is in the manifestelement, it is not required for the plug-in element unless it used tooverride that group of the manifest. The release attribute representsthe initial release for the update (e.g., subsequent releases may alsobe allowed but those will often have that plug-in version incorporatedalready or possibly a future version of the plug-in). In some cases, theconfigurations element is limited to one or more configuration elements,which can be specified with the platform (e.g., Microsoft® Windows® orApple® OS X) and/or software application product (e.g., Adobe® Acrobat®Reader, Standard, or Pro) attributes defined. For example, theattributes can be combined using inclusive logic (e.g., the default ineach case is to include everything, such that only specify the itemsneeded to single out configurations; not specifying either platform orproduct will act to include all platforms or products, respectively). Insome embodiments, enhanced logic is available along with logic operands(e.g., and, or, and negation).

In some embodiments, the tuner key attribute, such as shown in the aboveexample manifest schema, uses an enable prefix to describe a key valuepair which matches the software application registry entries regardingenterprise usage. If the tuner key is non-existent, the plug-in is notprecluded; otherwise, the availability of the plug-in is dependent onthe tuner key. For example, the tuner attribute enableWorkflows=“AcrobatHS,ShareFile” would indicate the check entries ofEnableAcrobatHS and EnableShareFile under the Workflows dictionary underthe Adobe® Acrobat® registry area. The URI attribute specifies a validlocation where the plug-in is located on a server. An appropriate hashalgorithm and value can be required that correspond to the data at theURI. In some embodiments, a registry can include a disableXXX settingthat is similar to an enableXXX setting except that in the absence ofthe registry key, the default behavior is to preclude the plug-in.

In some embodiments, there are several install attributes for on a perplug-in basis as well. These can include the requires prompt to overrideuser settings (if auto install); if applicable, on which pane (if any)to display the prompt (promptPane); and whether an immediate install isdesired (e.g., which may alter the UI instantaneously). In some cases,there is the capability to exclude downloads if the user has an askpreference for install (excludePromptInstall). The priority attributecan be used to describe the criticality for the update (e.g., to be usedby the UI in suggesting an update to the user), such as required,recommended, optional, and testing.

In some embodiments, the variants element is used to optionally hold oneor more variant elements, each of which describes that variant by itsname and its percentage. The special variant name “disabled” is reservedto indicate the option of not loading the plug-in at all and may beused, but only with that predefined meaning. The sum of percentagesshould generally total no more than 100; any remaining percentage istreated as the option “inactive”. In some embodiments, at runtime, theframework will select a choice based on the weighted options. Forexample, an A/B test to be equal distributed among 10% of users wouldhave variants of name=“A”, percentage=“5” and name=“B”, percentage=“5”.In some embodiments, in the actual plug-in IDS (e.g., an ids.xml file),the useVariant attribute may be used to override this variant selection(e.g., the UseVariant attribute can be used for overriding which varianthad initially been selected at download time when reading from the SPAplug-ins manifest) to allow for minimal change to the SWF, such as incases when a deadline for a periodic release is needed and/or in otheruse scenarios in which this functionality is desired. The SWF will beable to retrieve the variant using the new getVariant() API andindividual UI items (e.g., anything that supports the flag, perms-, andenable-attributes) and can use the variants attribute followed by acomma-separated list of variants as necessary. The variants can also berequired to be listed at the top level of the plugin ids.xml file.

In some embodiments, the startDate and revertDate attributes are used tocontrol the lifetime of a plug-in. The start date can indicate that aplugin should be downloaded immediately, but not loaded until a laterstart date. If not specified, the plug-in is to be installed at firstopportunity. Another possible usage of the startDate is to ensure thatall applicable users are ready when the testing is schedule to begin(e.g., to avoid a ramp-up period during which updates are occurringthrough a default update period). The revertDate can be used to ensurewhen a particular test should be concluded, such, as for testing a newplug-in/new version of a plug-in using the variant mechanism asdescribed herein with respect to various embodiments. Another possibleusage for the revertDate attribute can be to immediately stop all usageof a plug-in, such as in the event of some security issue.

In some embodiments, the locales element includes one or more localeelements that contains a language attribute (e.g., which follows the RFC3066 language code, such as lang=“en-US”), as well as a localized promptand optional note. The two reason fields (e.g., not and prompt) can beused for different situations. The prompt field can be used to displayone or more reasons for updates when the user is prompted as to whetherthe updated is desired. For example, this prompt can be an HTML stringthat will be used as the main body text of a Flash popup. A note,however, is used in the case where SPA provides a notification that anautomatic install has occurred. Due to its usage context, the note valuestring is generally not an HTML string.

Below is an example plug-in that includes variants. As shown below, thisplug-in supports three variants (e.g., variant=“A,B,C”). In thisexample, variant A is used for the top bar button, in the menus, and theadvertisements. Variant B will only display in the advertisements.Variant C only appears in the top bar button.

<?xml version=“1.0” encoding=“utf-8”?> <!-- --> <!-- Defining Adobe'sSPA EchoSign Plugin which is loaded in the EchoSign Pane and not in theAddOns pane --> <service id=“com.adobe.acrobat.services.DEXEchoSign”group=“com.adobe” version=“10.1.2” variant=“A,B,C”     name=“DEX SharePlug-in” xmlns=“http://ns.adobe.com/pdf/services/2010”enableLockdownSignService=“SignPane”>  <!-- locale settings --> <locales src=“locales.xml”/>  <!-- resources (only icons) --> <resources src=“resources.xml”/>  <!-- URLs used by this plugin :Acrobat.com web service APIs version 2.0 -- >  <preferences>   <!-- forEchoSign.com web services -->   <policyallowDomain=“https://*.echosign.com”/>   <policyallowDomain=“http://*.echosign.com”/>   <!-- for Acrobat.com webservices -->   <policy allowDomain=“https://*.acrobat.com”/>   <policyallowDomain=“http://*.acrobat.com”/>   <policyallowDomain=“https://*.acrocomcontent.com”/>   <policyallowDomain=“http://*.acrocomcontent.com”/>   <!-- for all www.adobe.comlinks -->   <policy allowDomain=“https://*.adobe.com”/>   <policyallowDomain=“http://*.adobe.com”/>  </preferences>  <panels>   <!-- theonly flash panel in this plugin -->   <flashPanel id=“EchoSignPanel”title=“Share” pane=“BasicEchoSignPane” swf=“SWFs/EchoSign.swf”        persist=“yes” events=“yes” openAction=“log-echoSignButtonClick”/>  </panels>  <!-- actions handled by this plugin-->  <actions>   <!-- Simple actions which throw the browse dialog  <action id=“shareBrowse” type=“event” panel=“SharePanel”name=“DEXEvent” data=“shareBrowse”/>   <action id=“attachBrowse”type=“event” panel=“SharePanel” name=“DEXEvent” data=“attachBrowse”/>  <action id=“cpdfBrowse” type=“event” panel=“SharePanel”name=“DEXEvent” data=“cpdfBrowse”/>   <action id=“shareAttachBrowse”type=“event” panel=“SharePanel” name=“DEXEvent”data=“shareAttachBrowse”/>   -->   <!-- Simple actions which expand thecorresponding panel -->   <action id=“spdfToolButton” type=“event”panel=“EchoSignPanel” name=“DEXEvent” data=“spdfToolButton”/>   <actionid=“spdfmenu” type=“event” panel=“EchoSignPanel” name=“DEXEvent”data=“spdfSysTray”/>   <action id=“spdfGateway” type=“event”panel=“EchoSignPanel” name=“DEXEvent” data=“spdfMenu”/>   <actionid=“spdfSysTray” type=“event” panel=“EchoSignPanel” name=“DEXEvent”data=“spdfSysTray”/>   <action id=“autoOpen” type=“event”panel=“EchoSignPanel” name=“DEXEvent” data=“autoOpen”/>    <actionid=“echoSignButton”  type=“event” panel=“EchoSignPanel” name=“DEXEvent”data=“echoSignButton”/>   <!-- Logs actions which logs HL and call theappropriate next action -->   <action id=“log-spdfToolButton” type=“log”name=“Toolbar_signPDF” next=“spdfToolButton”/>  <actionid=“log-spdfMenu” type=“log” name=“FileMenu_SignPDF” next=“spdfMenu”/>  <action id=“log-spdfGateway” type=“log” name=“WelcomeScreen_SignPDF”next=“spdfGateway”/>   <action id=“log-spdfSysTray” type=“log”name=“SysTray_SignPDF” next=“spdfSysTray”/>   <actionid=“log-paneAutoOpen”  type=“log” name=“PreviousEchoSignPaneSession”next=“autoOpen”/>    <action id=“log-echoSignButtonClick”    type=“log”name=“EchoSignButton” next=“echoSignButton”/>   <!-- Chained actions,open the share pane first and then the browse dialog   <actionid=“showShareAndBrowse” type=“open”  pane=“BasicSharePane”next=“shareBrowse”/>   <action id=“showAttachAndBrowse” type=“open” pane=“BasicSharePane” next=“attachBrowse”/>   <actionid=“showCPDFAndBrowse” type=“open”  pane=“BasicSharePane”next=“cpdfBrowse”/>   <action id=“showShareAttachAndBrowse” type=“open” pane=“BasicSharePane” next=“shareAttachBrowse”/>    -->   <!-- Chainedactions, open the share pane first and then expand the correspondingpanel -->   <action id=“showSPDFToolButton” type=“open”pane=“BasicEchoSignPane” next=“log-spdfToolButton”/>   <actionid=“showSPDFMenu” type=“open” pane=“BasicEchoSignPane”next=“log-spdfMenu”/>   <action id=“showSPDFGateway” type=“open”pane=“BasicEchoSignPane” next=“log-spdfGateway”/>   <actionid=“showSPDFSysTray” type=“open” pane=“BasicEchoSignPane”next=“log-spdfSysTray”/>   <action id=“paneAutoOpen”    type=“open”pane=“BasicEchoSignPane” next=“log-paneAutoOpen” flags=“B”/>   <!--Share Pane actions -->   <action id=“showSharePane” type=“open” pane=“BasicSharsePane”/>   <action id=“hideSharePane”  type=“open”/> </actions>  <!-- Toolbar items defined by this plugin -->  <buttons>  <button id=“SignPDF”   tooltip=“avTooltipToolbarItemSPDF”icon=“SPDFIcon_Md” rollover=“SPDFIcon_Md_R” action=“showSPDFToolButton”position=“end” label=“avCaptionToolbarItemSPDF” contextIcon=“SPDFIcon_Sm” locales=“en-US” variant=“A,C”/>  </buttons> <menus>   <!-- Menu items for EchoSign.com -->   <menuSeparatorreference=“Email” position=“after” locales=“en-US” variant=“A”/>  <menuItem label=“avCaptionMenuItemSPDF” action=“showSPDFMenu”icon=“SPDFIcon_Sm” locales=“en-US” variant=“A”/>  </menus>  <!--Advertisement items (to be shown in the gateway)  -->  <advertisements>  <advertisement id=“SignPDFGT”  label=“avLabelGTSignPDF”icon=“SPDFIcon_X1”  action=“showSPDFGateway”     locales=“en-US”variant=“A,B”/>  </advertisements> </service>

The following table gives some examples of how targeted information(e.g., using manifest 114 and/or target information 118) may be used totarget certain users, but target information is not limited to theexamples described below. Any target information which can be used todiscern a unique segment of users (e.g., paying customers versus freecustomers, those from a given state with certain laws, those who havecustomer feedback turned on, etc.) may be used.

TABLE 1 Examples of Target Information Example Target InformationExamples Platform Microsoft Windows, Apple Mac OS, Android Product AdobeAcrobat Reader, Adobe Acrobat Standard, Adobe Acrobat Pro EnterpriseUsers Identifies enterprise users and, if so, the particular company theenterprise user is associated with. If a user is an enterprise user, acompany or enterprise which a user is a member of, and/or rulesassociated with that company or enterprise may be obtained by checking arestricted registry area associated with the application (e.g., arestricted registry managed by Adobe Acrobat). In some embodiments, anenterprise customer sets a registry entry for all its users (whichnormal customers would not have set). The plug-ins then make use of thatentry to behave in some different fashion when the plug-in sees thatregistry entry set. MacOS also supports this via a special property listfile. Other platforms use other mechanisms as program resources. StartDate Indicates earliest permitted start date of a plug- in. The plug-inmay be downloaded prior to the start date, but not installed until thespecified start date. If not specified, the plug-in is installed at thefirst opportunity. Revert Date Indicates end date of a plug-in (e.g.,may be used to specify an end date to test out a variety of messages).Language Language of the message (and therefore the language of usersfor which the message is relevant). Variant Name(s) and Used to randomlydetermine whether to Percentage(s) display a message using a messagingplug-in. An example is described in further detail below.

In some embodiments, the target information is compared against localconfiguration information (e.g., basic attributes and/or advancedattributes) to determine if the plug-in should be downloaded and/orinstalled/loaded. For example, local configuration information can beobtained from a variety of sources and/or a variety of locations. Insome embodiments, a registry area (e.g., some of which may berestricted) associated with an application (e.g., Adobe® Acrobat®) isaccessed and location configuration information is obtained from there(e.g., such as tuner key settings/values).

FIG. 4 is a flow diagram of a process for interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly in accordance with someembodiments. At 402, processing a manifest is performed to determinethat a plug-in that includes a plurality of variants is available. At404, randomly selecting a variant for the plug-in to automaticallyinstall on a device is performed (e.g., the variant selection can bestored as a configuration parameter for the plug-in, such as a valuestored in a registry key). At 406, automatically installing the plug-inis performed, in which the randomly selected variant is executed atrun-time (e.g., at load time of the plug-in, the stored variantselection can be used to select the variant portion of plug-in toexecute).

FIG. 5 is another flow diagram of a process for interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly in accordance with someembodiments. At 502, monitoring user activity that includes aninteraction with a plug-in is performed. At 504, generating a reportbased on the monitored user activity that includes an interaction withthe plug-in is performed. At 506, sending the report that includes themonitored interaction with the plug-in to a server is performed.

FIG. 6 is another flow diagram of a process for interactive productimprovement through the use of variants and data gathering reports in asystem that can be updated on the fly in accordance with someembodiments. At 602, sending a manifest to a plurality of devices isperformed, in which the manifest identifies a plug-in that includes aplurality of variants that are available for the plug-in, and in whichthe variants are randomly selected for each of the plurality of devices(e.g., the variant selection can be stored as a configuration parameterfor the plug-in, such as a value stored in a registry key on each of thedevices). At 604, receiving a plurality of reports based on monitoredactivity that includes an interaction with the plug-in for each of theplurality of devices is performed. At 606, modifying the manifest tochange an allocation for each variant based on the monitoredinteractions with the plug-in is performed. In some embodiments, anautomatic algorithm can be performed to determine new parameters for anupdated manifest, and automatically updating the manifest (e.g.,generate the updated manifest on the server for distribution to clientdevices, such as for providing an automated, complete turn-key system).For example, if any candidate receives a plurality of votes and thenumber of votes exceeds a minimum sample number and a minimum number ofdays has passed, then update the manifest to utilize the winningvariant.

In some embodiments, the new parameters for an updated manifest areconfigured on a server copy of the manifest such that clients can beconfigured to select, in some cases, a different variant of a previouslydownloaded and installed plug-in (e.g., using this approach, the plug-inneed not be re-downloaded, rather, the new manifest just needs to bedownloaded and processed by the client device, which may result in a newvariant selection associated with the previously downloaded andinstalled plug-in, such that the stored variant selection parameter canbe updated accordingly, and at run-time, the variant of the plug-in isselected based on the possibly updated variant selection parameter). Insome cases, a new version of the plug-in that includes variants can beprovided, in which the variant selection parameter(s) on the clients arenot modified or updated (e.g., this can provide a control test group, inwhich the same users are grouped or associated as in a prior round oftesting of the previous version of the plug-in).

Although the foregoing embodiments have been described in some detailfor purposes of clarity of understanding, the invention is not limitedto the details provided. There are many alternative ways of implementingthe invention. The disclosed embodiments are illustrative and notrestrictive.

What is claimed is: 1-20. (canceled)
 21. A method comprising:determining, by a processor, that a plurality of variants of a plug-inare available for installation on a device; selecting, by the processor,a variant of the plug-in of the plurality of variants of the plug-in forinstallation on the device, the variant of the plug-in selected based ona predefined allocation scheme that specifies how the plurality ofvariants of the plug-in are to be allocated for installation on aplurality of devices; and installing the selected variant of the plug-inon the device.
 22. The method recited in claim 1, wherein the selectedvariant facilitates a feedback loop for providing interactive productimprovement through a use of variants and data gathering reports. 23.The method of claim 1, further comprising: monitoring user activity thatindicates interaction with at least one of the plurality of variants ofthe plug-in; generating a report based on the monitored user activity;and sending the report to a server.
 24. The method of claim 1, furthercomprising modifying the predefined allocation scheme to change apercentage allocation for each of the plurality of variants based on themonitored user activity.
 25. The method of claim 1, further comprisingmodifying the predefined allocation scheme to designate one of theplurality of variants as a default variant for the plug-in.
 26. Themethod of claim 1, wherein the selected variant requires a license toexecute.
 27. The method of claim 1, wherein the selected variantrequires a license to execute, and wherein additional payment isrequired to access the selected variant.
 28. A system comprising: aprocessor; and a non-transitory computer-readable medium communicativelycoupled to the processor, wherein the processor is configured to executeinstructions stored in the non-transitory computer-readable medium thatperform operations comprising: selecting a variant of the plug-in of theplurality of variants of the plug-in for installation on the device, thevariant of the plug-in selected based on a predefined allocation schemethat specifies how the plurality of variants of the plug-in are to beallocated for installation on a plurality of devices; and installing theselected variant of the plug-in on the device.
 29. The system recited inclaim 8, wherein the selected variant facilitates a feedback loop forproviding interactive product improvement through a use of variants anddata gathering reports.
 30. The system recited in claim 8, wherein theprocessor is further configured to execute instructions stored in thenon-transitory computer-readable medium that perform operationscomprising: monitoring user activity that indicates interaction with atleast one of the plurality of variants of the plug-in; generating areport based on the monitored user activity; and sending the report to aserver.
 31. The system recited in claim 8, wherein the processor isfurther configured to execute instructions stored in the non-transitorycomputer-readable medium that perform operations comprising modifyingthe predefined allocation scheme to change a percentage allocation foreach of the plurality of variants based on the monitored user activity.32. The system recited in claim 8, wherein the processor is furtherconfigured to execute instructions stored in the non-transitorycomputer-readable medium that perform operations comprising modifyingthe predefined allocation scheme to designate one of the plurality ofvariants as a default variant for the plug-in.
 33. The system recited inclaim 8, wherein the selected variant requires a license to execute. 34.The system recited in claim 8, wherein the selected variant requires alicense to execute, and wherein additional payment is required to accessthe selected variant.
 35. A computer program product, the computerprogram product being embodied in a tangible computer readable storagemedium and comprising computer instructions for: determining that aplurality of variants of a plug-in are available for installation on adevice; selecting a variant of the plug-in of the plurality of variantsof the plug-in for installation on the device, the variant of theplug-in selected based on a predefined allocation scheme that specifieshow the plurality of variants of the plug-in are to be allocated forinstallation on a plurality of devices; and installing the selectedvariant of the plug-in on the device.
 36. The computer program productrecited in claim 15, wherein the selected variant facilitates a feedbackloop for providing interactive product improvement through a use ofvariants and data gathering reports.
 37. The computer program productrecited in claim 15, wherein the computer program product being embodiedin a tangible computer readable storage medium further comprisescomputer instructions for: monitoring user activity that indicatesinteraction with at least one of the plurality of variants of theplug-in; generating a report based on the monitored user activity; andsending the report to a server.
 38. The computer program product recitedin claim 15, wherein the computer program product being embodied in atangible computer readable storage medium further comprises computerinstructions for modifying the predefined allocation scheme to change apercentage allocation for each of the plurality of variants based on themonitored user activity.
 39. The computer program product recited inclaim 15, wherein the computer program product being embodied in atangible computer readable storage medium further comprises computerinstructions for modifying the predefined allocation scheme to designateone of the plurality of variants as a default variant for the plug-in.40. The computer program product recited in claim 15, wherein theselected variant requires a license to execute.